package 算法;
/*
递归乘法。 写一个递归函数，不使用 * 运算符， 实现两个正整数的相乘。可以使用加号、减号、位移，但要吝啬一些。

示例1:

 输入：A = 1, B = 10
 输出：10
示例2:

 输入：A = 3, B = 4
 输出：12
提示:

保证乘法范围不会溢出

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/recursive-mulitply-lcci
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 递归乘法_leetcode面试题0805 {
    public static void main(String[] args) {
        System.out.printf(""+new 递归乘法_leetcode面试题0805().multiplyM(10,65));
    }
    //解法1：m*n == m+m+m （相加n次）
    public int multiplyS(int A, int B) {
        if(B < 2){
            return A;
        }
        return A+multiplyS(A,B-1);
    }
    //解法2：位移法
    public int multiplyM(int A, int B) {
        if(A == 0 || B == 0){
            return 0;
        }

        int res = B % 2 == 1 ?A:0;

        while (B>1){
            res += A<<1;
            B -= 2;
        }
        return res;
    }

}
